/* VMS version of getargs; Uses DCL command parsing.
   Copyright (C) 1989 Free Software Foundation, Inc.

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2, or (at your option)
   any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */




#include <ctype.h>
#include <stdio.h>
#include "files.h"

/*
 *	VMS version of getargs(): Uses DCL command parsing
 *		(argc and argv are ignored)
 */


int verboseflag;
int definesflag;
int debugflag;
int nolinesflag;
extern int fixed_outfiles;
extern char * version_string;

/* Allocate storgate and initialize, since bison uses them elsewhere.  */
char *spec_name_prefix;
char *spec_file_prefix;

getargs(argc,argv)
int argc;
char *argv[];
{
    register char *cp;
    static char Input_File[256];
    static char output_spec[256], name_prefix_spec[256], file_prefix_spec[256];
    extern char *infile;

    verboseflag = 0;
    definesflag = 0;
    debugflag = 0;
    fixed_outfiles = 0;
    nolinesflag = 0;
/*
   *	Check for /VERBOSE qualifier
   */


    if (cli_present("BISON$VERBOSE")) verboseflag = 1;
/*
   *	Check for /DEFINES qualifier
   */


    if (cli_present("BISON$DEFINES")) definesflag = 1;
/*
   *	Check for /FIXED_OUTFILES qualifier
   */


    if (cli_present("BISON$FIXED_OUTFILES")) fixed_outfiles = 1;
    if (cli_present("BISON$YACC")) fixed_outfiles = 1;
/*
   *	Check for /VERSION qualifier
   */


    if (cli_present("BISON$VERSION")) printf("%s",version_string);
/*
   *	Check for /NOLINES qualifier
   */


    if (cli_present("BISON$NOLINES")) nolinesflag = 1;
/*
   *	Check for /DEBUG qualifier
   */


    if (cli_present("BISON$DEBUG")) debugflag = 1;
/*
   *	Get the filename
   */


    cli_get_value("BISON$INFILE", Input_File, sizeof(Input_File));
/*
   *	Lowercaseify the input filename
   */


    cp = Input_File;
    while(*cp)
    {
        if (isupper(*cp)) *cp = tolower(*cp);
        cp++;
    }
    infile = Input_File;
/*
   *	Get the output file
   */


    if (cli_present("BISON$OUTPUT"))
    {
        cli_get_value("BISON$OUTPUT", output_spec, sizeof(output_spec));
        for (cp = spec_outfile = output_spec; *cp; cp++)
        if (isupper(*cp))
            *cp = tolower(*cp);
    }
/*
   *	Get the output file
   */


    if (cli_present("BISON$FILE_PREFIX"))
    {
        cli_get_value("BISON$FILE_PREFIX", file_prefix_spec,
            sizeof(file_prefix_spec));
        for (cp = spec_file_prefix = file_prefix_spec; *cp; cp++)
        if (isupper(*cp))
            *cp = tolower(*cp);
    }
/*
   *	Get the output file
   */


    if (cli_present("BISON$NAME_PREFIX"))
    {
        cli_get_value("BISON$NAME_PREFIX", name_prefix_spec,
            sizeof(name_prefix_spec));
        for (cp = spec_name_prefix = name_prefix_spec; *cp; cp++)
        if (isupper(*cp))
            *cp = tolower(*cp);
    }
}

/************  DCL PARSING ROUTINES  **********/

/*
 *	See if "NAME" is present
 */


int
cli_present(Name)
char *Name;
{
    struct {int Size; char *Ptr;} Descr;

    Descr.Ptr = Name;
    Descr.Size = strlen(Name);
return((cli_present(&Descr) & 1) ? 1 : 0);
}

/*
 *	Get value of "NAME"
 */


int
cli_get_value(Name,Buffer,Size)
char *Name;
char *Buffer;
{
    struct {int Size; char *Ptr;} Descr1,Descr2;

    Descr1.Ptr = Name;
    Descr1.Size = strlen(Name);
    Descr2.Ptr = Buffer;
    Descr2.Size = Size-1;
    if (cli_get_value(&Descr1,&Descr2,&Descr2.Size) & 1) {
        Buffer[Descr2.Size] = 0;
        return(1);
    }
    return(0);
}
